function verificarRiegoYEnviarAlertas() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const hojaUsuarios = ss.getSheetByName("datos usuarios");
  const hojaRiegos = ss.getSheetByName("Hoja 1");

  const usuarios = hojaUsuarios.getRange(2, 1, hojaUsuarios.getLastRow() - 1, 6).getValues(); // A:F
  const riegos = hojaRiegos.getRange(2, 2, hojaRiegos.getLastRow() - 1, 4).getValues(); // fecha-hora, nombre, pulsos, litros

  const zonaHoraria = Session.getScriptTimeZone();
  const hoy = new Date();

  usuarios.forEach((usuario, index) => {
    const [sensor, , correo, , horaInicioRaw, horaFinRaw] = usuario;
    let litrosFueraFranja = 0;
    let fechasFuera = []; // Aquí guardaremos los Date reales
    if (!horaInicioRaw || !horaFinRaw || !correo) {
      Logger.log(`Fila ${index + 2}: Falta horaInicio, horaFin o correo.`);
      return;
    }

    const horaInicio = new Date(horaInicioRaw);
    const horaFin = new Date(horaFinRaw);

    const inicio = new Date(hoy);
    inicio.setHours(horaInicio.getHours(), horaInicio.getMinutes(), 0, 0);

    const fin = new Date(hoy);
    fin.setHours(horaFin.getHours(), horaFin.getMinutes(), 0, 0);

    let riegoDentro = false;
    let riegoFuera = false;

riegos.forEach(riego => {
  const [fechaHoraRaw, nombre, , litros] = riego;
  
  if (nombre !== sensor || !litros || litros <= 0) return;

  const fechaRiego = new Date(fechaHoraRaw);

  if (isNaN(fechaRiego.getTime())) {
    Logger.log(`Fecha inválida para el riego: ${fechaHoraRaw}`);
    return;
  }

  // 💡 Ignorar riegos de días anteriores o futuros
  const esMismoDia = (
    fechaRiego.getFullYear() === hoy.getFullYear() &&
    fechaRiego.getMonth() === hoy.getMonth() &&
    fechaRiego.getDate() === hoy.getDate()
  );

if (!esMismoDia) return;

if (fechaRiego >= inicio && fechaRiego <= fin) {
  riegoDentro = true;
} else {
  riegoFuera = true;
  litrosFueraFranja += litros;
  fechasFuera.push(fechaRiego);
}
});

    let mensaje = "";
    const inicioStr = Utilities.formatDate(inicio, zonaHoraria, "dd/MM/yyyy HH:mm");
    const finStr = Utilities.formatDate(fin, zonaHoraria, "dd/MM/yyyy HH:mm");

if (!riegoDentro) {
  mensaje += `⚠️ No se detectó riego dentro del horario permitido para el sensor ${sensor} (${inicioStr} a ${finStr}).\n`;
}

if (riegoFuera && fechasFuera.length > 0) {
  // Ordenamos las fechas para obtener la primera y la última
  fechasFuera.sort((a, b) => a - b);
  const inicioFuera = fechasFuera[0];
  const finFuera = fechasFuera[fechasFuera.length - 1];

  const inicioFueraStr = Utilities.formatDate(inicioFuera, zonaHoraria, "HH:mm");
  const finFueraStr = Utilities.formatDate(finFuera, zonaHoraria, "HH:mm");

  mensaje += `🚫 Se detectó riego fuera del horario permitido entre ${inicioFueraStr} y ${finFueraStr}, con un total de ${litrosFueraFranja.toFixed(2)} litros.\n`;
}

    if (mensaje !== "") {
      MailApp.sendEmail({
        to: correo,
        subject: `🚨 Alerta de riego para ${sensor}`,
        body: mensaje
      });
    }
  });

  Logger.log("Revisión de riegos completada.");
}